package main

import (
	"unsafe"
	"fmt"
)

/**
  常量
 */
const str string  = "aaa"

const (
	Unknown = 0
	Female = 1
	Male = 2
)

//常量表达式中，函数必须是内置函数，否则编译不过
const (
	a = "abc"
	b = len(a)
	c = unsafe.Sizeof(a)
)

//iota，特殊常量，可以认为是一个可以被编译器修改的常量
//每一个const关键字出现时，被重置为0，然后再下一个const出现之前，每出现一次iota，其所代表的数字会自动增加1
//第一个 iota 等于 0，每当 iota 在新的一行被使用时，它的值都会自动加 1；所以 p=0, q=1, l=2
const (
	p = iota
	q
	l
)

//i=1：左移 0 位,不变仍为  1;
//j=3：左移 1 位,变为二进制 110, 即 6;
//k=3：左移 2 位,变为二进制 1100, 即 12;
//l=3：左移 3 位,变为二进制 11000,即 24。
const (
	i=1<<iota
	j=3<<iota
	k
	n
)

const (
	A = iota // 0
	B // 1
	C = "c" // c
	D // c，与上⼀一⾏行相同。
	E = iota // 4，显式恢复。注意计数包含了 C、D 两⾏行。
	F // 5
)
func main() {
	println(a, b, c)
	println(p, q, l)

	fmt.Println("i=",i)
	fmt.Println("j=",j)
	fmt.Println("k=",k)
	fmt.Println("n=",n)
}